﻿using System;
using System.Collections.Generic;
using System.Threading;
using Microsoft.Practices.CompositeUI;
using Microsoft.Practices.CompositeUI.EventBroker;
using NetROS.Tiers.Entities;
using NetRosApp.Infrastructure.Interface;
using NetRosApp.Klijenti.Constants;

namespace NetRosApp.Klijenti
{
    public partial class NarudzbaViewPresenter : RacunViewPresenter
    {
       
        public override void DataBindStaticForm()
        {
            base.DataBindStaticForm();
         //   (View as IRacunPonudaView).DataBindStatic(_NacinPlacanjaService.GetAll());
            ((INarudzbaView) View).DataBindStaticOrgZiro(_OrganizacijaZiroRacunService.GetAll());
            ((INarudzbaView) View).DataBindVrstaJedMje(_ArtiklMjeraService.GetAll());
        }

        //internal void ShowIzjvestaj()
        //{

        //    base.ShowReportForDokumentTip(_entity);
        //}
        public void KreirajRačun(Dokument Entity)
        {

            if (_vezaService.GetByIDChild(Entity.ID).Count == 0)
            {
                Dokument StornoDokument = new Dokument();

                StornoDokument.Oznaka = String.Format("Po narudžbi {0}",Entity.Oznaka);
                StornoDokument.Datum = DateTime.Now;
                StornoDokument.IDOrganizacijaOd = Entity.IDOrganizacijaOd;
                StornoDokument.IDOrganizacijaOdSource = Entity.IDOrganizacijaOdSource;
            //    StornoDokument.IDOrganizacijaPrema = Entity.IDOrganizacijaPrema;
             //   StornoDokument.PorezNabavneVrijednosti = Entity.PorezNabavneVrijednosti;
                StornoDokument.IDDokumentTip = (int)DokumentTipList.Prijemni_list;
                StornoDokument.DateCreated = DateTime.Now;
                StornoDokument.DateModified = DateTime.Now;
                Djelatnik currentdjelatnik = _djelatnikService.GetByNaziv(Thread.CurrentPrincipal.Identity.Name);
                StornoDokument.IDUserIzdaoSource = currentdjelatnik;
                StornoDokument.IDUserIzdao = currentdjelatnik.ID;
                StornoDokument.IDKlijent = Entity.IDKlijent;
                StornoDokument.IDKlijentSource = Entity.IDKlijentSource;
                StornoDokument.IDValute = 1;
                StornoDokument.PorezNabavneVrijednosti = 1;
              //  StornoDokument.NabavnaVrijednost = Entity.NabavnaVrijednost;
                StornoDokument.Napomena = String.Format("Narudžba-{0}", Entity.Oznaka);
             //   StornoDokument.Napomena2 = Entity.Napomena2;
         //       StornoDokument.IDNacinTransporta = Entity.IDNacinTransporta;
        //        StornoDokument.IDValute = null;
       //         StornoDokument.IDNacinPlacanja = Entity.IDNacinPlacanja;
                StornoDokument.DatumDo = Entity.DatumDo;
                StornoDokument.VezaDokumenta = String.Format("Narudžba-{0}", Entity.Oznaka);
           //     StornoDokument.IDOrganizacijaZiroRacun = Entity.IDOrganizacijaZiroRacun;


                foreach (DokumentStavka tmpstav in Entity.DokumentStavkaCollection)
                {
                    if (tmpstav.Prilagoden == null)
                    {
                        DokumentStavka nova = new DokumentStavka();

                        nova.IDArtikl = tmpstav.IDArtikl;
                        if (nova.IDArtikl != null)
                            nova.IDArtiklSource = _ArtiklService.DeepLoadByID(nova.IDArtikl.Value, true, NetROS.Tiers.Data.DeepLoadType.IncludeChildren, typeof(ArtiklMjera));
                        nova.Kolicina = tmpstav.Kolicina;
                        //nova.Kolicina2 = tmpstav.Kolicina2;
                        //nova.Kolicina3 = tmpstav.Kolicina3;
                        //nova.Vrijednost = tmpstav.Vrijednost;
                        //nova.Vrijednost2 = tmpstav.Vrijednost2;
                        nova.Vrijednost4 = 0;
                        Decimal? cijena = GetVPCArtiklSkladiste(tmpstav.IDArtikl.Value, tmpstav.IDOrgJedOd, tmpstav.IDArtiklSource.Usluga) as Decimal?;
                        nova.Vrijednost2 = cijena;

                        //nova.Vrijednost3 = tmpstav.Vrijednost3;
                        //nova.Postotak = tmpstav.Postotak;
                        //nova.IDValuta = tmpstav.IDValuta;
                        //nova.IDValuta2 = tmpstav.IDValuta2;
                        nova.IDOrgJedOd = tmpstav.IDOrgJedOd;
                        nova.IDValuta = 1;
                        //nova.Vrijednost4 = tmpstav.Vrijednost4;
                        //nova.Postotak2 = tmpstav.Postotak2;
                        //nova.Postotak3 = tmpstav.Postotak3;
                        //nova.Postotak4 = tmpstav.Postotak4;
                        //nova.Prilagoden = tmpstav.Prilagoden;
                        //nova.PrilagodenJedMj = tmpstav.PrilagodenJedMj;
                        StornoDokument.DokumentStavkaCollection.Add(nova);
                    }
                }
                //foreach (DokumentDodatak tmpstav in Entity.DokumentDodatakCollection)
                //{

                //    DokumentDodatak nova = new DokumentDodatak();
                //    nova.Opis = tmpstav.Opis;
                //    nova.Iznos = tmpstav.Iznos;
                //    StornoDokument.DokumentDodatakCollection.Add(nova);
                //}

                //Veza novaveza = new Veza();
                //novaveza.IDChild = parentDokument.ID;
                //novaveza.IDChildSource = parentDokument;
                //novaveza.IDParent = StornoDokument.ID;


                //StornoDokument.VezaCollectionGetByIDParent.Add(novaveza);
                if (StornoDokument.DokumentStavkaCollection.Count != 0)
                {
                 _dokumentService.DeepSave(StornoDokument, NetROS.Tiers.Data.DeepSaveType.IncludeChildren, typeof(TList<DokumentStavka>), typeof(TList<Veza>));
                 WorkItem.EventTopics[EventTopicNames.OpenCreateView].Fire(View, new EventArgs<object, object, object, object, WorkItem>(typeof(PrimkaView), StornoDokument, null, null, WorkItem.Parent), WorkItem, PublicationScope.Global);
                }

                //foreach (DokumentDodatak tmpstav in Entity.DokumentDodatakCollection)
                //{

                //    DokumentDodatak nova = new DokumentDodatak();
                //    nova.Opis = tmpstav.Opis;
                //    nova.Iznos = tmpstav.Iznos;
                //    StornoDokument.DokumentDodatakCollection.Add(nova);
                //}

                //Veza novaveza = new Veza();

                //novaveza.IDChild = parentDokument.ID;

                //novaveza.IDParent = StornoDokument.ID;
                //novaveza.IDChildSource = parentDokument;
                //StornoDokument.VezaCollectionGetByIDChild.Add(novaveza);
                //bool result = _dokumentService.DeepSave(StornoDokument, NetROS.Tiers.Data.DeepSaveType.IncludeChildren, typeof(TList<DokumentStavka>), typeof(TList<Veza>));

                //Dokument _tmpl = Entity;
                //if (result)
                //{
                //    _tmpl.IDDokumentTip = (int)DokumentTipList.Ponuda_storno;
                //    SaveData();

                //    int? IDZapisa = null;
                //    DataSet tmpset = _dokumentService.Zapisi(StornoDokument.ID, ref IDZapisa);

                //    if (IDZapisa.HasValue)
                //    {
                //        result = true;
                //    }
                //}


                // if (result)
                // {
                ////     View.DataBindEntity(_tmpl);

                //    StornoDokument = _dokumentService.GetByID(StornoDokument.ID);
                

            }
        }


        readonly Dictionary<string, VwArtiklStanjeuSkladistu> _StanjaIPredRez= new Dictionary<string,VwArtiklStanjeuSkladistu>();
        
        /// <summary>
        /// Vraća stanje i stanja Predračun + Rezervacija.
        /// </summary>
        /// <param name="IDArtikl">ID Artikla</param>
        /// <param name="IDOrgJed">ID Organizacije</param>
        /// <param name="Kolumn">1 za PredRez 0 za Stanje</param>
        /// <returns></returns>
        protected internal double? GetStanjeOrPredRez(int IDArtikl, int IDOrgJed, int Kolumn)
        {
      //      WorkItem.EventTopics.Get(EventTopicNames.StatusUpdate).Fire(this, new EventArgs<string>("Loading...."), WorkItem, PublicationScope.Global);
            String _key = String.Format("{0}-{1}",IDArtikl,IDOrgJed);

            if (!_StanjaIPredRez.ContainsKey(_key))
            {
                VList<VwArtiklStanjeuSkladistu> _tmpStanjaList = _vwartiklStanjeuSkladistuService.Get(String.Format("IDArtikl={0} and IDSkladiste ={1}", IDArtikl, IDOrgJed),"IDArtikl ASC");
                if (_tmpStanjaList.Count != 0)
                {
                    _StanjaIPredRez.Add(_key, _tmpStanjaList[0]);
                }
                else
                {
                    return null;
                }
            }

            if (_StanjaIPredRez.ContainsKey(_key)){
            switch (Kolumn)
            {
                case 0:
                    return _StanjaIPredRez[_key].Stanje;
                case 1:
                    return _StanjaIPredRez[_key].Predracun + _StanjaIPredRez[_key].Rezervirano;
            }
            }
            return null;
        //    WorkItem.EventTopics.Get(EventTopicNames.StatusUpdate).Fire(this, new EventArgs<string>("Ready"), WorkItem, PublicationScope.Global);
        }

        public override void KopiranjeStavaka()
        {
           // KopiranjeStavkiCore(_entity);
            base.KopiranjeStavaka();
            ((INarudzbaView)View).RefreshForma(_entity);
        }

    }
}


